﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CreatingObjects3d
{
    [Serializable()]
    class ObjetoPanorama
    {
        private String imagenTrasera;
        private String imagenAbajo;
        private String imagenFrontal;
        private String imagenDerecha;
        private String imagenIzquierda;
        private String imagenArriba;
        private String imagenTraseraProyecto;
        private String imagenAbajoProyecto;
        private String imagenFrontalProyecto;
        private String imagenDerechaProyecto;
        private String imagenIzquierdaProyecto;
        private String imagenArribaProyecto;

        public ObjetoPanorama()
        {
            imagenAbajo = "";
            imagenArriba = "";
            imagenDerecha = "";
            imagenFrontal = "";
            imagenIzquierda = "";
            imagenTrasera = "";
             imagenTraseraProyecto = "";
         imagenAbajoProyecto = "";
         imagenFrontalProyecto= "";
         imagenDerechaProyecto ="";
        imagenIzquierdaProyecto = "";
         imagenArribaProyecto = "";
        }

        #region Metodos Get y Set C#

        public String ImagenTrasera
        {
            get { return imagenTrasera; }
            set { imagenTrasera = value;}
        }

        public String ImagenAbajo
        {
            get { return imagenAbajo; }
            set { imagenAbajo = value; }
        }

        public String ImagenFrontal
        {
            get { return imagenFrontal; }
            set { imagenFrontal = value; }
        }

        public String ImagenDerecha
        {
            get { return imagenDerecha; }
            set { imagenDerecha = value; }
        }

        public String ImagenIzquierda
        {
            get { return imagenIzquierda; }
            set { imagenIzquierda = value; }
        }

        public String ImagenArriba
        {
            get { return imagenArriba; }
            set { imagenArriba = value; }
        }

        public String ImagenTraseraProyecto
        {
            get { return imagenTraseraProyecto; }
            set { imagenTraseraProyecto = value; }
        }

        public String ImagenAbajoProyecto
        {
            get { return imagenAbajoProyecto; }
            set { imagenAbajoProyecto = value; }
        }

        public String ImagenFrontalProyecto
        {
            get { return imagenFrontalProyecto; }
            set { imagenFrontalProyecto = value; }
        }

        public String ImagenDerechaProyecto
        {
            get { return imagenDerechaProyecto; }
            set { imagenDerechaProyecto = value; }
        }

        public String ImagenIzquierdaProyecto
        {
            get { return imagenIzquierdaProyecto; }
            set { imagenIzquierdaProyecto = value; }
        }

        public String ImagenArribaProyecto
        {
            get { return imagenArribaProyecto; }
            set { imagenArribaProyecto = value; }
        }

        #endregion

        public override string ToString()
        {
            String codigo;
            codigo = " backUrl ";
            codigo += String.Format("\"{0}\" ", imagenTrasera);
            codigo += "bottomUrl ";
            codigo += String.Format("\"{0}\" ", imagenAbajo);
            codigo += "frontUrl ";
            codigo += String.Format("\"{0}\" ", imagenFrontal);
            codigo += "leftUrl ";
            codigo += String.Format("\"{0}\" ", imagenIzquierda);
            codigo += "rightUrl ";
            codigo += String.Format("\"{0}\" ", imagenDerecha);
            codigo += "topUrl ";
            codigo += String.Format("\"{0}\" ", imagenArriba);
            return codigo;
        }
    }
}

/*
 Sólo se emplea el primer nodo Background que se encuentre, debiéndose especificar en el archivo principal.
 Backgroud{  
    groundAngle     [ ]  
    groundColor     [ ]  
    skyAngle        [ ]  
    skyColor        [ ]  
    backUrl         "dirección_URL"  
    bottomURL       "dirección_URL"  
    frontUrl        "dirección_URL"  
    leftUrl         "dirección_URL"  
    rightUrl        "dirección_URL"  
    topUrl          "dirección_URL"  
}
     Todos estos campos no se utilizan simultaneamente, sino que su uso dependerá del tipo de fondo que se desee crear.
  

DEFINICION DE CIELO Y SUELO CON COLORES *********************  
El fondo de tipo Backdrop se construye mediante una esfera incompleta (el suelo) inmersa dentro de otra esfera completa (el cielo), en donde el visitante se situa en el centro de ambas. 
Estas esferas tienen un radio infinito.
 
Backgroud{  
    groundAngle     [.785]  
    groundColor     [ .14 .28 0,.09 .11 0 ]  
    skyAngle        [.785 ]  
    skyColor        [.02 0 .26, .02 0 .65 ]  
}  

El campo skyColor determina el color del cielo en los distintos ángulos de la esfera que lo contiene.
El primer valor de este campo determina el color del cielo en los 0.0 radianes de la esfera, es decir, el color que tiene el cielo en el lugar donde se une con el suelo.  

skyAngle: es utilizado para indicar los ángulos (en radianes) en los que un nuevo color debe aparecer. 
skyColor: debe poseer N+1 colores si en skyAngle se han definido N ángulos, ya que el ángulo 0.0 (que es el que se corresponde con el cielo del horizonte) no se incluye en este último.  

groundColor y groundAngle: son equivalentes a skyColor y skyAngle respectivamente, pero referidos a la esfera que representa el suelo.  
Si se especifica más de un color, se interpolará el color del suelo entre los colores de 0 a 90 grados en el horizonte (plano X-Z). 
De forma similar se interpretan los colores del cielo, de 90 a 180 grados en la vertical (plano X-Y).
 


Panorama ********

Sintaxis:  

Backgroud{  
    backUrl           "dirección_URL"  
    bottomURL     "dirección_URL"  
    frontUrl           "dirección_URL"  
    leftUrl              "dirección_URL"  
    rightUrl           "dirección_URL"  
    topUrl              "dirección_URL"  
}
 
de las cuales ocupa una de las caras de una inmensa caja centrada en el eje de coordenadas. 
Las imágenes que ocupan cada una de las caras vendrán determinadas por los valores de los campos backUrl, bottomUrl, frontUrl, leftUrl, rightUrl, topUrl. 
Todos estos campos toman como valor una dirección URL de un fichero que contiene una imágen en formato jpeg, gif o png 
  
CONVERSION DE GRADOS A RADIANES. (GRADOS * PI) / 180 
 
 */